package views.mediators {
  import com.axon.base.managers.AxPopUpManager;
  import com.axon.dataservices.helpers.AxDSUtils;
  import com.axon.mvc.patterns.mediator.AxMediator;

  import flash.display.DisplayObject;

  import helpers.Verbs;

  import models.vo.Atividade;
  import models.vo.Pleito;
  import models.vo.Produto;
  import models.vo.SetorEconomico;

  import mx.utils.StringUtil;

  import views.components.PleitoPropCaracterizacaoView;

  public class PleitoPropCaracterizacaoMediator extends AxMediator {
    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function PleitoPropCaracterizacaoMediator(viewComponent:DisplayObject) {
      super(viewComponent);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function get view():PleitoPropCaracterizacaoView {
      return this.viewComponent as PleitoPropCaracterizacaoView;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    override protected function initialize():void {
      regResponseInterest(Atividade, [Verbs.REGISTRAR_ANALISE]);
      regResponseInterest(Produto, [Verbs.REGISTRAR_ANALISE]);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventSelectionChange(body:Object):void {
      if ((!view.treeAtivProd.selectedItem) || (view.treeAtivProd.selectedItem.type == "root")) {

        view.vsAtivProd.selectedIndex = 0;
      }

      else if (view.treeAtivProd.selectedItem.type == "atividade") {

        cloneSelectedAtividade();
        view.vsAtivProd.selectedIndex = 1;
      }

      else {
        cloneSelectedProduto();
        view.vsAtivProd.selectedIndex = 2;
        view.mostrarSetorEconomico = (Pleito(view.vo).getIncentivo().mnemonic != "red_12_5_irpj");
        if (view.mostrarSetorEconomico) {
          view.selectedSetor = view.selectedProduto.setorEconomico ?
            AppFacade.getInstance().models.setoresEconomicos.withId(view.selectedProduto.setorEconomico.id) as SetorEconomico :
            null;
        }
        if (view.adgProducao)
          view.reloadProducao();
      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventFocusIn(body:Object):void {
      switch (body) {
        case view.txtArProdutoAnaliseDireito:

          if ((StringUtil.trim(view.selectedProduto.analiseDireito) == "") && (!view.cbDireitoNegado.selected)) {
            view.selectedProduto.analiseDireito = "Atende às condições legais ao direito do benefício.";
            eventDataChange(view.txtArProdutoAnaliseDireito);
          }
          break;
      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventDataChange(body:Object):void {
      if (body == view.txtAtividadeDescricao) {

        view.pbAtividadeSalvar.enabled = view.allowEdition;
        view.pbAtividadeDescartar.enabled = view.allowEdition;
      }

      else {

        view.pbProdutoSalvar.enabled = view.allowEdition;
        view.pbProdutoDescartar.enabled = view.allowEdition;
      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventDiscard(body:Object):void {
      var ativ:Atividade = new Atividade();
      var prod:Produto = new Produto()

      if (view.treeAtivProd.selectedItem.type == "atividade") {

        ativ = Atividade(Pleito(view.vo).getCaracterizacao().getAtividadeById(view.treeAtivProd.selectedItem.id));
      }

      else {

        ativ = Pleito(view.vo).getCaracterizacao().getAtividadeById(view.treeAtivProd.selectedItem.atividade_id);
        prod = ativ.getProdutoById(view.treeAtivProd.selectedItem.id);
      }

      if (body == view.pbAtividadeDescartar) {

        cloneSelectedAtividade();
        view.pbAtividadeSalvar.enabled = false;
        view.pbAtividadeDescartar.enabled = false;
      }

      else {

        cloneSelectedProduto();
        view.pbProdutoSalvar.enabled = false;
        view.pbProdutoDescartar.enabled = false;
      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventRegistrarAnalise(body:Object):void {
      if (body == view.pbAtividadeSalvar) {

        if (StringUtil.trim(view.txtAtividadeDescricao.text) == '') {
          AxPopUpManager.messageDlg('A descrição da atividade não pode ficar em branco.', 'Erro');
          return;
        }

        view.selectedAtividade.descricaoAnalista = view.txtAtividadeDescricao.text;
        callController(Atividade, Verbs.REGISTRAR_ANALISE, view.selectedAtividade);
      }

      else if (body == view.pbProdutoSalvar) {

        if (StringUtil.trim(view.txtProdutoDescricao.text) == '') {
          AxPopUpManager.messageDlg('A descrição do produto não pode ficar em branco.', 'Erro');
          return;
        } else if (view.cmbSetorEconomico.visible && !view.cmbSetorEconomico.selectedItem) {
          AxPopUpManager.messageDlg('Informe o setor econômico para o produto.', 'Erro');
          return;
        } else if (view.txtProdutoEnquadramento.visible && StringUtil.trim(view.txtProdutoEnquadramento.text) == '') {
          AxPopUpManager.messageDlg('Informe o enquadramento no setor econômico para o produto.', 'Erro');
          return;
        }

        view.selectedProduto.descricaoAnalista = view.txtProdutoDescricao.text;

        if (view.cmbSetorEconomico.visible) {
          view.selectedProduto.setorEconomico = view.cmbSetorEconomico.selectedItem as SetorEconomico;
          view.selectedProduto.enquadramento = view.txtProdutoEnquadramento.text;
        }

        if (view.txtArProdutoObsVistoria)
          view.selectedProduto.obsVistoria = view.txtArProdutoObsVistoria.text;

        if (view.txtArProdutoAnaliseDireito) {
          view.selectedProduto.analiseDireito = view.txtArProdutoAnaliseDireito.text;
          view.selectedProduto.direitoNegado = view.cbDireitoNegado.selected;
        }

        callController(Produto, Verbs.REGISTRAR_ANALISE, view.selectedProduto);
      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respAtividadeRegistrarAnaliseSuccess(sender:Object, body:Object, extraInfo:Object):void {
      var ativ:Atividade = Atividade(Pleito(view.vo).getCaracterizacao().getAtividadeById(view.treeAtivProd.selectedItem.id));
      var id:String = ativ.id;

//			ativ.descricaoAnalista = view.txtAtividadeDescricao.text;

      ativ.descricaoAnalista = Atividade(body).descricaoAnalista;

      view.treeData = Pleito(view.vo).getCaracterizacao().getAtivProdTreeData(Pleito(view.vo).getIncentivo().mnemonic);

      view.treeAtivProd.validateNow();
      view.treeAtivProd.selectedIndex = 0;
      view.treeAtivProd.expandChildrenOf(view.treeAtivProd.selectedItem, true);

      selectTreeNode("atividade", id);

      cloneSelectedAtividade();

      view.pbAtividadeSalvar.enabled = false;
      view.pbAtividadeDescartar.enabled = false;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respAtividadeRegistrarAnalisFailure(sender:Object, body:Object, extraInfo:Object):void {
      view.errorString = "Falha no registro da descrição da atividade (provavelmente algum problema no servidor).";
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respProdutoRegistrarAnaliseSuccess(sender:Object, body:Object, extraInfo:Object):void {
      var ativ:Atividade = Atividade(Pleito(view.vo).getCaracterizacao().getAtividadeById(view.treeAtivProd.selectedItem.atividade_id));
      var prod:Produto = Produto(ativ.getProdutoById(view.treeAtivProd.selectedItem.id));
      var id:String = prod.id;

//			prod.descricaoAnalista	= view.txtProdutoDescricao.text;
//			prod.setorEconomico		= view.cmbSetorEconomico.selectedItem as SetorEconomico;

      prod.descricaoAnalista = Produto(body).descricaoAnalista;
      prod.setorEconomico = Produto(body).setorEconomico;

      if (view.txtArProdutoObsVistoria)
        prod.obsVistoria = Produto(body).obsVistoria;

      if (view.txtArProdutoAnaliseDireito) {
        prod.direitoNegado = Produto(body).direitoNegado;
        prod.analiseDireito = Produto(body).analiseDireito
      }

      view.treeData = Pleito(view.vo).getCaracterizacao().getAtivProdTreeData(Pleito(view.vo).getIncentivo().mnemonic);

      view.treeAtivProd.validateNow();
      view.treeAtivProd.selectedIndex = 0;
      view.treeAtivProd.expandChildrenOf(view.treeAtivProd.selectedItem, true);

      selectTreeNode("produto", id);

      cloneSelectedProduto();

      view.pbProdutoSalvar.enabled = false;
      view.pbProdutoDescartar.enabled = false;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respProdutoRegistrarAnaliseFailure(sender:Object, body:Object, extraInfo:Object):void {
      view.errorString = "Falha no registro da análise do produto (provavelmente algum problema no servidor).";
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function cloneSelectedAtividade():void {
      view.selectedAtividade = AxDSUtils.clone(Pleito(view.vo).getCaracterizacao().getAtividadeById(view.treeAtivProd.selectedItem.id)) as Atividade;

      view.selectedAtividade.descricaoAnalista = (view.selectedAtividade.descricaoAnalista != "") ? view.selectedAtividade.descricaoAnalista : view.selectedAtividade.descricao;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function cloneSelectedProduto():void {
      var ativ:Atividade = Pleito(view.vo).getCaracterizacao().getAtividadeById(view.treeAtivProd.selectedItem.atividade_id);

      view.selectedProduto = AxDSUtils.clone(ativ.getProdutoById(view.treeAtivProd.selectedItem.id)) as Produto;

      view.selectedProduto.descricaoAnalista = (view.selectedProduto.descricaoAnalista != "") ? view.selectedProduto.descricaoAnalista : view.selectedProduto.descricao;

      view.acProducao = view.selectedProduto.getProducaoViewArrayCollection();

    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function selectTreeNode(type:String, id:String):void {
      var i:int = 0;

      while (true) {
        i++;
        view.treeAtivProd.selectedIndex = i;
        if ((view.treeAtivProd.selectedItem.type == type) && (view.treeAtivProd.selectedItem.id == id))
          break;
      }
    }

  }
}